2617. Дни рождения

 

Если у кого-нибудь в ЛКШ день рождения, устраивается праздник. Помогите культоргам выяснить, сколько раз им устраивать дни рождения в течение смены ЛКШ.Август.

 

Вход. Количество ЛКШат, отмечающих дни рождения в августе, затем  числа, когда эти дни рождения отмечаются. Количество именинников в ЛКШ.Август не более 300.

 

Выход. Вывести количество праздников.

 

Пример входа

Пример выхода

6 1 2 5 2 2 20

4

 

 

РЕШЕНИЕ

сортировка подсчетом

 

Анализ алгоритма

Отметим, что нас интересуют дни рождения только за август (один месяц), в котором 31 день. Для каждого дня от 1 до 31 подсчитаем, сколько ЛКШат родилось именно в этот день. А потом подсчитаем количество дней, в которых ЛКШата празднуют дни рождения.

 

Реализация алгоритма

Дни рождения могут принимать значения от 1 до 31 включительно (в августе 31 день). В ячейке m[i] подсчитаем количество ЛКШат, у которых день рождения приходится в точности на день номер i.

 

#define MAX 32

int m[MAX];

 

Основная часть программы.

 

scanf("%d",&n);

memset(m,0,sizeof(m));

 

Для каждого дня подсчитываем количество ЛКШат, у которых в этот день день рождения.

 

for(i = 0; i < n; i++)

{

  scanf("%d",&day);

  m[day]++;

}

 

В переменной res подсчитаем количество дней, в которое празднуются дни рождения. Если m[i] не равно нулю, то существует хотя бы один ученик, у которого день рождения i-го августа.

 

for(res = i = 0; i < MAX; i++)

  if (m[i]) res++;

 

Выводим количество праздников.

 

printf("%d\n",res);